import java.util.Calendar;
import java.util.List;

public class Main {
		
	public static void main(String[] args) {

		try {
			//Hora
			Tiempo tiempo = new Tiempo();
			tiempo.setName("Hora");
			tiempo.start();
			
			//Carga los pedidos de un archivo.
			List<Cliente> listaClientes = LeerDeArchivo.leer("recursos\\input.txt", ";");
			
			//Archivo de log
			Log.setOut("recursos\\output.txt");
			
			Log.write(Calendar.getInstance().getTime().toString());
			Log.write("");
			
			//Planificador
			PlanificadorClientes planificador = new PlanificadorClientes("Planificador");
			planificador.setName(planificador.getIdPlanificador());
			planificador.start();
			
			//Creo los Vendedores
			Vendedor Vendedor1 = new Vendedor(1, planificador, tiempo);
			Vendedor1.setName("Vendedor" + Vendedor1.getIdVendedor());
			Vendedor Vendedor2 = new Vendedor(2, planificador, tiempo);
			Vendedor2.setName("Vendedor" + Vendedor2.getIdVendedor());
			Vendedor Vendedor3 = new Vendedor(3, planificador, tiempo);
			Vendedor3.setName("Vendedor" + Vendedor3.getIdVendedor());
			Vendedor[] Vendedores = {Vendedor1, Vendedor2, Vendedor3};
			
			for (int i = 0; i < Vendedores.length; i++) {
				Vendedores[i].start();
			}
			
			//Se ingresan los Clientes en sus respectivas filas.
			for (Cliente a: listaClientes)
			{
				Thread cliente = new Thread(a);
				cliente.start();
			}
			
			// Hora cierre del punto de venta
			Calendar horaCierre = Calendar.getInstance();
			horaCierre.set(Calendar.HOUR_OF_DAY, 11);
			horaCierre.set(Calendar.MINUTE, 1);
			horaCierre.set(Calendar.SECOND, 0);
			
			long tiempoDeTrabajo = (horaCierre.getTime().getTime() - tiempo.getHora().getTime())/2; 
			
			Thread.sleep(tiempoDeTrabajo);
			for (Vendedor Vendedor: Vendedores)
			{
				Log.write("Vendedor " + Vendedor.getIdVendedor() + " ha dejado de trabajar.");
				Vendedor.parar();				
			}
			planificador.apagar();
			for (Vendedor Vendedor: Vendedores)
			{
				Vendedor.join();				
			}
			tiempo.parar();
			Log.write("Puntos de Venta cerrados.");
			System.exit(0);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
